﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIPDTO;

namespace SIPDAL
{
    public class mgClerigo
    {
                /// <summary>
        /// Declaracion de Variables
        /// </summary>
        SIPDataContext _dc = new SIPDataContext();
        tblClerigo _tbsacerdote = new tblClerigo();
        List<dtoClerigo> _clerigo = new List<dtoClerigo>();
        List<dtoPersonas> _persona = new List<dtoPersonas>();
        dtoError _resp = new dtoError();

        /// <summary>
        /// Constructor de la clase
        /// </summary>
        /// 

     public mgClerigo()
        {
            
        }

        /// <summary>
        /// Metodo para el registro de clerigo
        /// </summary>
        /// <param name="pers"></param>
        /// <returns></returns>
     public dtoError RegistrarClerigo(dtoClerigo clerigo, int evento)
        {
            _tbsacerdote.tipo_identificacion = clerigo.TipoIdentificacion;
            _tbsacerdote.identificacion = clerigo.Identificacion;
            _tbsacerdote.id_cargo = clerigo.Rango;
            _tbsacerdote.id_parroquia = clerigo.IdParroquia;
            _tbsacerdote.id_diocesis = clerigo.IdDiocesis;
            _tbsacerdote.activo = clerigo.Estado;

        try
            {
                _resp = ExisteClerigo(clerigo);
                if ((_resp.IdError == -101) && (evento == 1))
                {
                    _dc.tblClerigos.InsertOnSubmit(_tbsacerdote);
                    _dc.SubmitChanges();
                    _resp.Mensaje = "Información guardada correctamente.";
                    _resp.IdError = 100;
                }
                if ((_resp.IdError == 101) && (evento == 1))
                {
                    _resp.Mensaje = "La información del clérigo ya se encuentra registrada.";
                    _resp.IdError = -100;
                }
                else if ((_resp.IdError == 101) && (evento == 2))// Se modifica los registros del clerigo
                {

                    var condicion = (from p in _dc.tblClerigos
                                     where p.identificacion == clerigo.Identificacion &&
                                     p.tipo_identificacion == clerigo.TipoIdentificacion
                                     select p).ToList();

                    foreach (tblClerigo _reg in condicion)
                    {
                        _reg.activo = Convert.ToBoolean(clerigo.Estado);
                        _reg.id_cargo = clerigo.Rango;
                        _reg.id_diocesis = clerigo.IdDiocesis;
                        _reg.id_parroquia = clerigo.IdParroquia;
                        _dc.SubmitChanges();
                        _resp.Mensaje = "Información modificada correctamente.";
                        _resp.IdError = 100;
                    }

                }
                return _resp;
            }

            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                return _resp;
            }
            
        }

     public dtoError ExisteClerigo(dtoClerigo clerigo)
        {
            
            var condicion = (from p in _dc.tblClerigos
                             where p.identificacion == clerigo.Identificacion
                             && p.tipo_identificacion == clerigo.TipoIdentificacion
                             select p).Count();          
            if (Convert.ToInt32(condicion.ToString()) > 0)
            {
                _resp.Mensaje = "Registro ya existe.";
                _resp.IdError = 101;

            }
            else
            {
                _resp.IdError = -101;
                _resp.Mensaje = "Registro no existe.";
            }
            return _resp;
        }

        /// <summary>
        /// Obtiene la información del clérigo que va a ser mostrada en pantalla para modificar
        /// </summary>
        /// <param name="clerigo"></param>
        /// <returns></returns>
        public List<dtoClerigo> ObtenerClerigo(dtoClerigo clerigo) 
        {
            int i = 0;
            try
            {
                var condicion = (from p in _dc.tblClerigos
                                 where p.identificacion == clerigo.Identificacion && p.tipo_identificacion == clerigo.TipoIdentificacion 
                                  orderby p.id_parroquia
                                  select p).ToList();

                foreach (tblClerigo reg in condicion)
                {
                    _clerigo.Add(new dtoClerigo());
                    _clerigo[i].Identificacion = reg.identificacion;
                    _clerigo[i].TipoIdentificacion = reg.tipo_identificacion;
                    _clerigo[i].IdDiocesis = Convert.ToInt16(reg.id_diocesis);
                    _clerigo[i].IdParroquia = Convert.ToInt16(reg.id_parroquia);
                    _clerigo[i].Rango = reg.id_cargo;
                    _clerigo[i].Estado = Convert.ToBoolean(reg.activo);
                    i++;

                }
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo recuperar la informacion. " + ex.Message);
            }

            return _clerigo;

        }
       
        /// <summary>
        /// Obtiene la información del clérigo asignado a la parroquia
        /// </summary>
        /// <param name="clerigo"></param>
        /// <returns></returns>
        public List<dtoClerigo> ObtenerClerigoxParroquia(dtoClerigo clerigo) 
        {
            int i = 0;
            try
            {
                var condicion = (from p in _dc.tblClerigos
                                 where p.id_parroquia == clerigo.IdParroquia
                                 select p).ToList();

                foreach (tblClerigo reg in condicion)
                {
                    _clerigo.Add(new dtoClerigo());
                    _clerigo[i].Identificacion = reg.identificacion;
                    _clerigo[i].TipoIdentificacion = reg.tipo_identificacion;
                    _clerigo[i].NombreCompleto = reg.nombre_completo;
                    _clerigo[i].IdParroquia = Convert.ToInt16(reg.id_parroquia);
                    _clerigo[i].Rango = reg.id_cargo;
                    _clerigo[i].Estado = Convert.ToBoolean(reg.activo);
                    i++;

                }
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo recuperar la informacion. " + ex.Message);
            }

            return _clerigo;

        }

        /// <summary>
        /// Obtiene la información del clérigo asignado a la parroquia para formar combo Constacias
        /// </summary>
        /// <param name="clerigo"></param>
        /// <returns></returns>
        public List<dtoClerigo> ObtenerClerigoxParroquia(int parroquia)
        {
            int i = 0;
            try
            {

                var condicion = (from p in _dc.tblClerigos
                                 where p.id_parroquia == parroquia
                                 select p).ToList();

                foreach (tblClerigo reg in condicion)
                {
                    _clerigo.Add(new dtoClerigo());
                    _clerigo[i].Identificacion = reg.tipo_identificacion + "-" + reg.identificacion;
                    _clerigo[i].NombreCompleto = reg.nombre_completo;
                    i++;

                }
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo recuperar la informacion. " + ex.Message);
            }

            return _clerigo;

        }
        /// <summary>
        /// Inactiva el registro del clérigo 
        /// </summary>
        /// <param name="clerigo"></param>
        /// <returns></returns>
        public dtoError InactivarClerigo(dtoClerigo clerigo)
        {
            try
            {
               var condicion = (from p in _dc.tblClerigos
                                 where p.identificacion == clerigo.Identificacion &&
                                 p.tipo_identificacion == clerigo.TipoIdentificacion
                                 select p).ToList();

               foreach (tblClerigo _reg in condicion)
                {
                    _reg.activo = Convert.ToBoolean(clerigo.Estado);
                }
                _dc.SubmitChanges();
                _resp.Mensaje = "Sacerdote inactivado correctamente.";
                _resp.IdError = 100;
                return _resp;
            }

            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                return _resp;
                throw;
            }

        }

        /// <summary>
        /// Obtiene la informacion del clérigo que se va a mostrar en el grid y en la lista
        /// </summary>
        /// <returns></returns>
        public List<dtoClerigo> ObtenerTodosClerigo() 
        {
            int i = 0;
            try
            {
                var condicion = (from p in _dc.tblClerigos
                                 select p).ToList();

                foreach (tblClerigo reg in condicion)
                {
                    _clerigo.Add(new dtoClerigo());
                    _clerigo[i].Identificacion = reg.identificacion;
                    _clerigo[i].TipoIdentificacion = reg.tipo_identificacion;
                    _clerigo[i].IdParroquia = Convert.ToInt16(reg.id_parroquia);
                    _clerigo[i].IdDiocesis = Convert.ToInt16(reg.id_diocesis);
                    _clerigo[i].Rango = reg.id_cargo;
                    _clerigo[i].Estado = Convert.ToBoolean(reg.activo);
                    i++;

                }
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo recuperar la informacion. " + ex.Message);
            }

            return _clerigo;

        }
    }
}


